home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / showmount.nasl < prev    next >
Text File  |  2005-01-14  |  5KB  |  167 lines

  1. #
  2. # Get the export list of the remote host and 
  3. # warns the user if a NFS share is exported to the
  4. # world.
  5. #
  6. # Written by Renaud Deraison <deraison@cvs.nessus.org>
  7. #
  8. #
  9.  
  10. if(description)
  11. {
  12.  script_id(10437);
  13.  script_version ("$Revision: 1.18 $");
  14.  script_cve_id("CAN-1999-0554", "CAN-1999-0548");
  15.  
  16.  name["english"] = "NFS export";
  17.  name["francais"] = "Export NFS";
  18.  script_name(english:name["english"], francais:name["francais"]);
  19.  
  20.  desc["english"] = "
  21. This plugin retrieves the list of NFS exported shares,
  22. and issues a red alert if some of them are world readable.
  23.  
  24. It also warns the user if the remote NFS server is superfluous.
  25.  
  26. Risk factor : Low / Medium";
  27.  
  28.  desc["francais"] ="
  29. Ce plugin lit la liste des partitions NFS exportΘs, et
  30. cause une alerte si certaines sont montables par le monde entier.
  31.  
  32. Il prΘvient aussi l'utilisateur si un daemon NFS superflu 
  33. tourne";
  34.  
  35.  script_description(english:desc["english"], francais:desc["francais"]);
  36.  
  37.  summary["english"] = "Checks for NFS";
  38.  summary["francais"] = "VΘrifie les partitions NFS";
  39.  script_summary(english:summary["english"], francais:summary["francais"]);
  40.  
  41.  script_category(ACT_GATHER_INFO);
  42.  
  43.  
  44.  script_copyright(english:"This script is Copyright (C) 2000 Renaud Deraison",
  45.         francais:"Ce script est Copyright (C) 2000 Renaud Deraison");
  46.  family["english"] = "Remote file access";
  47.  family["francais"] = "AccΦs aux fichiers distants";
  48.  script_family(english:family["english"], francais:family["francais"]);
  49.  script_dependencie("rpc_portmap.nasl");
  50.  script_require_keys("rpc/portmap");
  51.  exit(0);
  52. }
  53.  
  54.  
  55.  
  56.  
  57. include("misc_func.inc");
  58.  
  59. #----------------------------------------------------------------------------#
  60. #                              Here we go                                    #
  61. #----------------------------------------------------------------------------#
  62.  
  63. security_problem = 0;
  64. list = "";
  65. number_of_shares = 0;
  66. port = get_rpc_port(program:100005, protocol:IPPROTO_TCP);
  67. soc = 0;
  68. if(port)
  69. {
  70.  soc = open_priv_sock_tcp(dport:port);
  71.  proto = "tcp";
  72. }
  73. else 
  74. {
  75.  proto = "udp";
  76.  port = get_rpc_port(program:100005, protocol:IPPROTO_UDP);
  77.  if(port) soc = open_priv_sock_udp(dport:port);
  78.  else exit(0);
  79. }
  80.   
  81.    
  82.   if(soc)
  83.   {
  84.    req = raw_string(0x80, 0x00, 0x00, 0x28, 0x85, 0x80, 0x41, 0xEF, 0x00, 0x00,
  85.                0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01,
  86.             0x86, 0xA5, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
  87.             0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  88.             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  89.             0x00, 0x00);
  90.    send(socket:soc, data:req);
  91.    r = recv(socket:soc, length:8192);
  92.    if(strlen(r) > 31)
  93.    {
  94.     value = ord(r[31]);
  95.     start = 32;
  96.     while(value)
  97.      {
  98.      length = ord(r[start]);
  99.      length = ord(r[start+1])+length*256;
  100.      length = ord(r[start+2])+length*256;
  101.      length = ord(r[start+3])+length*256;
  102.      directory = "";
  103.      for(i=0;i<length;i=i+1)
  104.      {
  105.       directory = directory + r[start+4+i];
  106.      }
  107.      align = 4 - length % 4;
  108.      if (align == 4)align = 0;
  109.      nxt_group = ord(r[start+length+4+3+align]);
  110.      if(!nxt_group)nogroup = 1;
  111.      else nogroup = 0;
  112.      start = start + length + 4 + 4 + align;
  113.      groups="";
  114.      while(nxt_group)
  115.      {
  116.       group_len = ord(r[start]);
  117.       group_len = ord(r[start+1]) + group_len*256;
  118.       group_len = ord(r[start+2]) + group_len*256;
  119.       group_len = ord(r[start+3]) + group_len*256;
  120.       g = "";
  121.       for(i=0;i<group_len;i=i+1)
  122.       {
  123.        g = string(g, r[start+4+i]);
  124.       }
  125.       if(g == "*")security_problem = 1;
  126.       groups = groups + g;
  127.       groups = groups + ", ";
  128.       align = 4 -  group_len % 4;
  129.       if (align == 4)align = 0;
  130.       nxt_group = ord(r[start+4+group_len+3+align]);
  131.       if(nxt_group)start = start + 4 + group_len + 4 + align;
  132.       else start = start + 8 + group_len + align;
  133.      }
  134.     if(nogroup){
  135.         groups = "(mountable by everyone)";
  136.         security_problem = 1;
  137.     }
  138.     value = ord(r[start+3]);
  139.     start = start + 4;
  140.     list = list + directory + " " + groups + string("\n");
  141.     set_kb_item(name:"nfs/exportlist", value:directory);
  142.     number_of_shares = number_of_shares + 1;
  143.    }
  144.  if(number_of_shares)
  145.  {
  146.   report = string("Here is the export list of ", get_host_name(), " : \n");
  147.   report = report + list;
  148.   if(security_problem)security_warning(port:2049, data:report, proto:proto);
  149.   else security_warning(port:2049, data:report, proto:proto);
  150.   exit(0);
  151.  }
  152.  else
  153.    {
  154.     report = string("You are running a superfluous NFS daemon.\n", 
  155.           "You should consider removing it\n"); 
  156.     security_warning(port:2049, data:report, proto:proto);
  157.     exit(0);
  158.    }          
  159.   }
  160.   else
  161.    {
  162.     report = string("You are running a superfluous NFS daemon.\n", 
  163.           "You should consider removing it\n"); 
  164.     security_warning(port:2049, data:report, proto:proto);
  165.    }
  166. }
  167.